home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / Source.bin / FadeFilter.java < prev    next >
Text File  |  1998-08-21  |  6KB  |  214 lines

  1. package symantec.itools.awt.image;
  2.  
  3. import java.awt.Color;
  4. import java.awt.image.RGBImageFilter;
  5. import java.awt.image.ColorModel;
  6. import java.awt.image.DirectColorModel;
  7. import java.lang.IllegalArgumentException;
  8. import java.util.ResourceBundle;
  9. import java.text.MessageFormat;
  10.  
  11. // Written by Levi Brown and Micheal Hopkins 1.1, July 8, 1997.
  12.  
  13. /**
  14.  * An Image filter to use for fading an Image towards a specified Color by a specified percent.
  15.  * @version 1.1, July 8, 1997
  16.  * @author  Symantec
  17.  */
  18. public class FadeFilter extends RGBImageFilter
  19. {
  20.     /**
  21.      * Constructs a default FadeFilter.
  22.      * By default the Image is faded 50% towards Color.lightGray.
  23.      * @see FadeFilter#FadeFilter(double)
  24.      * @see FadeFilter#FadeFilter(java.awt.Color)
  25.      * @see FadeFilter#FadeFilter(double, java.awt.Color)
  26.      * @see #setPercent
  27.      * @see #setFadeToColor
  28.      */
  29.     public FadeFilter()
  30.     {
  31.         this(0.50, Color.lightGray);
  32.     }
  33.  
  34.     /**
  35.      * Constructs a FadeFilter.
  36.      * By default the Image is faded towards Color.lightGray.
  37.      * @param percent the percent to fade towards the specified color
  38.      * @see FadeFilter#FadeFilter()
  39.      * @see FadeFilter#FadeFilter(java.awt.Color)
  40.      * @see FadeFilter#FadeFilter(double, java.awt.Color)
  41.      * @see #setFadeToColor
  42.      */
  43.     public FadeFilter(double percent)
  44.     {
  45.         this(percent, Color.lightGray);
  46.     }
  47.  
  48.     /**
  49.      * Constructs a FadeFilter.
  50.      * By default the Image is faded 50%.
  51.      * @param fadeToColor the color to fade to
  52.      * @see FadeFilter#FadeFilter()
  53.      * @see FadeFilter#FadeFilter(double)
  54.      * @see FadeFilter#FadeFilter(double, java.awt.Color)
  55.      * @see #setPercent
  56.      */
  57.     public FadeFilter(Color fadeToColor)
  58.     {
  59.         this(0.50, fadeToColor);
  60.     }
  61.  
  62.     /**
  63.      * Constructs a FadeFilter.
  64.      * @param percent the percent to fade towards the specified color
  65.      * @param fadeToColor the color to fade to
  66.      * @see FadeFilter#FadeFilter()
  67.      * @see FadeFilter#FadeFilter(double)
  68.      * @see FadeFilter#FadeFilter(java.awt.Color)
  69.      */
  70.     public FadeFilter(double percent, Color fadeToColor)
  71.     {
  72.         errors = ResourceBundle.getBundle("symantec.itools.resources.ErrorsBundle");
  73.         canFilterIndexColorModel = true;
  74.         try
  75.         {
  76.             setPercent(percent);
  77.         }
  78.         catch (IllegalArgumentException exc)
  79.         {
  80.             Object[] args = { new Double(percent) };
  81.             System.err.println("FadeFilter: " + errors.getString("InvalidPercent1"));
  82.             System.err.println("     " + errors.getString("InvalidPercent2"));
  83.             System.err.println("     " + errors.getString("InvalidPercent3"));
  84.             try { setPercent(0.50); } catch (IllegalArgumentException exc2) {}
  85.         }
  86.  
  87.         try
  88.         {
  89.             setFadeToColor(fadeToColor);
  90.         }
  91.         catch (NullPointerException exc)
  92.         {
  93.             System.err.println("FadeFilter: Null parameter value passed to constructor:");
  94.             System.err.println("     fadeToColor is null");
  95.             System.err.println("     Defaulting to Color.lightGray.");
  96.             setFadeToColor(Color.lightGray);
  97.         }
  98.     }
  99.  
  100.  
  101.     /**
  102.      * Sets the color to fade to when filtering.
  103.      * @param fadeTo the color to fade to
  104.      * @see #getFadeToColor
  105.      */
  106.     public void setFadeToColor(Color fadeTo)
  107.     {
  108.         to_r = fadeTo.getRed();
  109.         to_g = fadeTo.getGreen();
  110.         to_b = fadeTo.getBlue();
  111.     }
  112.  
  113.     /**
  114.      * Gets the color used to fade to when filtering.
  115.      * @return the color used to fade to
  116.      * @see #setFadeToColor
  117.      */
  118.     public Color getFadeToColor()
  119.     {
  120.         return new Color(to_r,    to_g, to_b);
  121.     }
  122.  
  123.     /**
  124.      * Sets the percentage to fade when filtering.
  125.      * @param percent the percentage to fade
  126.      * @exception IllegalArgumentException
  127.      * if the specified percentage value is unacceptable
  128.      * @see #getPercent
  129.      */
  130.     public void setPercent(double percent) throws IllegalArgumentException
  131.     {
  132.         symantec.itools.util.GeneralUtils.checkValidPercent(percent);
  133.  
  134.         this.percent = percent;
  135.     }
  136.  
  137.     /**
  138.      * Gets the percentage to fade when filtering.
  139.      * @return the percentage to fade
  140.      * @see #setPercent
  141.      */
  142.     public double getPercent()
  143.     {
  144.         return percent;
  145.     }
  146.  
  147.     /**
  148.      * Filters an RGB value using the current fade settings.
  149.      * @param x unused
  150.      * @param y unused
  151.      * @param rgb the rgb value to fade
  152.      * @return the faded rgb value
  153.      */
  154.     public int filterRGB( int x, int y, int rgb )
  155.     {
  156.         DirectColorModel cm = (DirectColorModel)ColorModel.getRGBdefault();
  157.  
  158.         int alpha    = cm.getAlpha(rgb);
  159.         int from_r    = cm.getRed(rgb);
  160.         int from_g    = cm.getGreen(rgb);
  161.         int from_b    = cm.getBlue(rgb);
  162.         int r, g, b;
  163.  
  164.         if (from_r > to_r)
  165.             r = to_r + (int)((from_r - to_r)* (1 - percent));
  166.         else
  167.             r = to_r - (int)((to_r - from_r)* (1 - percent));
  168.         if (from_g > to_r)
  169.             g = to_g + (int)((from_g - to_g)* (1 - percent));
  170.         else
  171.             g = to_g - (int)((to_g - from_g)* (1 - percent));
  172.         if (from_b > to_b)
  173.             b = to_b + (int)((from_b - to_b)* (1 - percent));
  174.         else
  175.             b = to_b - (int)((to_b - from_b)* (1 - percent));
  176.  
  177.         alpha    = alpha << 24;
  178.         r        = r        << 16;
  179.         g        = g        << 8;
  180.  
  181.         return alpha | r | g | b;
  182.     }
  183.  
  184.     /**
  185.      * The percentage to fade when filtering.
  186.      * @see #getPercent
  187.      * @see #setPercent
  188.      */
  189.     protected double percent;
  190.     /**
  191.      * The red value of the color to fade to when filtering.
  192.      * @see #getFadeToColor
  193.      * @see #setFadeToColor
  194.      */
  195.     protected int to_r;
  196.     /**
  197.      * The green value of the color to fade to when filtering.
  198.      * @see #getFadeToColor
  199.      * @see #setFadeToColor
  200.      */
  201.     protected int to_g;
  202.     /**
  203.      * The blue value of the color to fade to when filtering.
  204.      * @see #getFadeToColor
  205.      * @see #setFadeToColor
  206.      */
  207.     protected int to_b;
  208.  
  209.     /**
  210.      * Error strings.
  211.      */
  212.     transient protected ResourceBundle errors;
  213. }
  214.